#include <stdio.h>
#include <stdlib.h>

#include "iliste.h"
#include "liste.h"

iliste_s* conversionOfListIntoIList(liste_s* liston){
	int i = 0;
	iliste_s* tmp = (iliste_s*)malloc(sizeof(iliste_s)); //allocation de memoire pour le iliste
	if (tmp == NULL){
	  fprintf(stderr, "Erreur lors d'allocation memoire\n");
	  exit(EXIT_FAILURE);
	}
	
	tmp->tailleVal = listeLen(liston);
	tmp->val = (int*)malloc(sizeof(int)*tmp->tailleVal); //allocation memoire pour le tableau
	if (tmp->val == NULL){
	  fprintf(stderr, "Erreur lors d'allocation memoire\n");
	  exit(EXIT_FAILURE);
	}
	
	tmp->suiv = NULL;

	while(liston != NULL){
		tmp->val[i] = liston->state;
		i++;
		liston = liston->suiv;
	}
	return tmp;
}

void print_iliste( iliste_s *iliste ){
	int i;

	printf("%d -> ",iliste->state);
	for( i = 0; i < iliste->tailleVal; i++){
		printf("%d ",iliste->val[i]);
	}
	printf("\n");
}

void libere_iliste( iliste_s **liste ){
	iliste_s *tmp;
	while( *liste != NULL ){
		tmp = *liste;
		*liste = tmp->suiv;
		free( tmp->val );
		free( tmp );
	}
}

int compareListIList(iliste_s* iliston, liste_s* liston){
	int i;
	liste_s* temp = liston;
	while(liston != NULL){
		if (intInTab(liston->state, iliston->val, iliston->tailleVal) == 0){
			return 0;
		}
		liston = liston->suiv;
	}
	if( listeLen(temp) == iliston->tailleVal ){
		return 1;
	}
	
	return 0;
}

int tailleIListe( iliste_s *liste ){
	int taille = 0;
	while( liste != NULL ){
		taille++;
		liste = liste->suiv;
	}

	return taille;
}